guint n_images;
VkImage *images;
+ cairo_region_t **regions;
#endif
guint32 draw_index;
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
GdkDisplay *display;
VkDevice device;
+ guint i;
+ for (i = 0; i < priv->n_images; i++)
+ {
+ cairo_region_destroy (priv->regions[i]);
+ }
+ g_clear_pointer (&priv->regions, g_free);
g_clear_pointer (&priv->images, g_free);
priv->n_images = 0;
VkSwapchainKHR new_swapchain;
VkResult res;
VkDevice device;
+ guint i;
if (gdk_window_get_width (window) == priv->swapchain_width &&
gdk_window_get_height (window) == priv->swapchain_height)
vkDestroySwapchainKHR (device,
priv->swapchain,
NULL);
+ for (i = 0; i < priv->n_images; i++)
+ {
+ cairo_region_destroy (priv->regions[i]);
+ }
+ g_clear_pointer (&priv->regions, g_free);
g_clear_pointer (&priv->images, g_free);
priv->n_images = 0;
}
priv->swapchain,
&priv->n_images,
priv->images);
+ priv->regions = g_new (cairo_region_t *, priv->n_images);
+ for (i = 0; i < priv->n_images; i++)
+ {
+ priv->regions[i] = cairo_region_create_rectangle (&(cairo_rectangle_int_t) {
+ 0, 0,
+ gdk_window_get_width (window),
+ gdk_window_get_height (window),
+ });
+ }
}
else
{
GdkVulkanContext *context = GDK_VULKAN_CONTEXT (draw_context);
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
GError *error = NULL;
+ guint i;
if (!gdk_vulkan_context_check_swapchain (context, &error))
{
return;
}
+ for (i = 0; i < priv->n_images; i++)
+ {
+ cairo_region_union (priv->regions[i], region);
+ }
+
GDK_VK_CHECK (vkAcquireNextImageKHR, gdk_vulkan_context_get_device (context),
priv->swapchain,
UINT64_MAX,
priv->draw_semaphore,
VK_NULL_HANDLE,
&priv->draw_index);
+
+ cairo_region_union (region, priv->regions[priv->draw_index]);
}
static void
priv->draw_index
},
});
+
+ cairo_region_destroy (priv->regions[priv->draw_index]);
+ priv->regions[priv->draw_index] = cairo_region_create ();
}
static void